# Module 'dircache'
#
# Renvoie une liste triée des fichiers contenus dans un répertoire POSIX, et
# utilise un cache afin de ne pas lire trop souvent le même répertoire.
# Contient aussi une fonction permettant d'ajouter des slashes à des chemins
# d'accès de répertoires.

import posix
import path

cache = {}

def listdir(path): # Dresse la liste du contenu d'un répertoire, en utilisant
                   # le cache si nécessaire
	try:
		cached_mtime, list = cache[path]
		del cache[path]
	except RuntimeError:
		cached_mtime, list = -1, []
	try:
		mtime = posix.stat(path)[8]
	except posix.error:
		return []
	if mtime <> cached_mtime:
		try:
			list = posix.listdir(path)
		except posix.error:
			return []
		list.sort()
	cache[path] = mtime, list
	return list

opendir = listdir # XXX compatibilité avec les versions précédentes

def annotate(head, list): # Ajoute un suffixe '/' aux chemins d'accès des
                          # répertoires spécifiés
	for i in range(len(list)):
		if path.isdir(path.cat(head, list[i])):
			list[i] = list[i] + '/'
